株式会社ユーユー|次代を担うシステム・イノベーター

minikubeをインストールしてKubernatesを触ってみる その1

そろそろKubernatesをやっておかないとね

Kubernatesというのは、あれです。あの「コマンド一発で、webサーバー、アプリサーバー、DBサーバーを作成する。」っていうやつです。皆さんの仕事の環境では、「そんなのあたりまえ」だったり、「AWS使ってるけど、そんなことにはなってない。ほんとはできるはずって聞いたことはある」だったりするかもしれません。

私の今までの職場も「ほんとはできるはずって聞いたことはある」タイプの職場だったので、仕事としてはKubernatesを覚えても使い道がないのですが、開発環境としては、「仮想環境をいろいろいじれるようになっておきたい」ので、minikubeというのを使って、Kubernatesを触ってみることにしました。

仕事でKubernatesを使う場合には、それはその時にしっかり覚えればよいので、今の目標は「Kubernatesについて、話ができる」程度には、知っておきたいということになります。「話ができる」というのは、Kubernatesの話題になったときに、臆せずに入っていけるとか、開発環境ぐらいなら、「担当させてもらえないですか」と言ってみる勇気が持てるとか、かな。学習曲線(https://www.k-wam.jp/wamken/41215/)のことを考えても、最初の入門段階を終わらせておけば、あとは何とかなる、はず。

これまで、チームの内部で必要なサーバー(gitlabとかwikiとか)をたてるのは、VagrantとかAnsibleを使ってきた。仮想マシンには、LXDとかVirtualBoxとかかな。Dockerは、ちょっと使ってみたけど、変更した結果が全部元に戻るのがなじめなかった。

最初に、ご本家のドキュメントを見てみる。
https://kubernetes.io/ja/docs/home/
いきなり、これを最初から読み始めるのは、無理かな。やめたほうがいい。ちょっと試しに見てみよう。「コンセプト」のところは、タイトルだけ見て、内容はスキップさせてもらって、次に「タスク」と「チュートリアル」がある。チュートリアルが最初ちゃうんかい? と、ちょっと言葉がおかしくなる。普通はチュートリアルが先だろうと思って、「チュートリアル」を見ると、minikubeがインストール済みである前提で、話が進んでいる。じゃ、minikubeのインストールを書いてあるところを探すと、「タスク」の最初に「ツールのインストール」がある。しょうがないので、そこを読むと、kubectl, kind, minikube, kubeadmと、4つのツールのインストールについて書いてある。4つともインストールする必要があるように見えるが、じつはそうじゃない。ほかのKubernates入門のようなサイトによると、kubectlは必須で、kindとminikubeは、どちらか選択する。kubeadmは、minikubeで遊ぶだけなら、まだ必要ない。つまり、このサイトは全然親切じゃない。というか、混乱している。

ほかの日本語の入門記事を探す。「minikube 使ってみた」の検索ワードで検索すると、次の記事が見つかった。
https://qiita.com/naoyuki1115/items/b277822c18d88f4a0b27
Kubernetesについても説明があって、いい感じにまとまっていると思う。NodeとかPodとか、用語を整理しておかないと、何を読んでもなんだかわからない。この記事では、WindowsやMacで、VirtualBoxをいれて動かす説明をしている。個人的には、普段ブラウザーを使ったり、開発でVisual Studio Codeを使ったりしているメインのマシンに、minikubeを入れるのは嫌なので、minikubeを入れるのは、別のサーバー専用マシンを使う。

自宅サーバーにminikubeを入れる

ひと昔前に、「中国からXeonマシンを購入すると安くできる」という話題がありました。
https://pc.watch.impress.co.jp/docs/column/kaimono/1117740.html
中古のXeonと、Xeon用のマザーボードは、いまだにaliexpressで売っています。なんなら、当時よりマザーボードは品質が高くなった気がする。中国の人は、最新のグラボをつけて、ゲームマシンとして使うらしい。が、もともとサーバー用のCPUなので、普通にサーバーとして使っても何の問題もないです。まぁ、aliexpressで、何万円も買い物をするという時点で結構なギャンブルです。いまのところ、動かないCPUが送られてきたりとかということはありません。ただし、なかにはエンジニアリング・サンプルを売ってたりすることもあるらしいので、注意が必要です。「型番は明記してあるので、エンジニアリング・サンプルなのかどうかは、自分で判断してください」ということになります。ギャンブルという意味では、ヤフオクやメルカリを使う時も同じ注意が必要です。ヤフオクと同じくらいの気持ちでaliexpressを使ってます。

ということで、私の自宅のサーバーは、Xeonが2つ入っていて、合計で 24/48(Core/Thread)です。メモリは128Gあります。ちょっとやりすぎました。EATXのケースが高価なうえにでかくて持て余してます。

OSは、Centos Stream 9を入れました。OSインストールの種類は「Server with GUI」です。
https://www.server-world.info/query?os=CentOS_Stream_9&p=download
サーバーの設定については、すべてこのサイトを参考にしています。ここを見て、初期設定やfirewalldの設定などを済ませます。minikubeの入れ方とかも書いてあるのですが、仮想環境としてKVMを使う説明になってます。KVMは使ったことないので、minikubeについては、ほかのところを参考にすることにします。

いろいろみていると、Podmanというのが、Dockerとほぼ同じことができるらしいです。コマンドもほぼ同じで、最初のコマンド名をdockerから、podmanに書き換えれば、だいたい動くとのことです。

で、インストールしようとすると、すでに入っていました。Centos Stream 9には、Podmanはデフォルトでインストール済みでした。minikubeを動かすのには、「Podmanは正式サポートではないよ」みたいなことが、あちこちに書いてありますが、Podmanがだめなら、Dockerを入れればいいので、Podmanでやってみることにします。

minikubeのサイトを見て、minikubeのインストール。
https://minikube.sigs.k8s.io/docs/start/
OSなどを選んで、インストールする。私の場合は、以下の組み合わせ。
Linux, x86-84, Stable, RPM Package

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
sudo rpm -Uvh minikube-latest.x86_64.rpm

minikubeが無事インストール出来たかどうか確認する。

[nobuakiy@localhost ~]$ minikube start
😄 Centos 9 上の minikube v1.34.0
👎 デフォルトドライバーを採用できませんでした。こちらが可能性の高い順に考えられる事です:
▪ podman: Not healthy: “sudo -n -k podman version –format {{.Version}}” exit status 1: sudo: a password is required
▪ podman: 提案: Add your user to the ‘sudoers’ file: ‘nobuakiy ALL=(ALL) NOPASSWD: /usr/bin/podman’ , or run ‘minikube config set rootless true’ <https://podman.io>
💡 代わりに、これらのドライバーのいずれかをインストールすることもできます:
▪ docker: Not installed: exec: “docker”: executable file not found in $PATH
▪ kvm2: Not installed: exec: “virsh”: executable file not found in $PATH
▪ qemu2: Not installed: exec: “qemu-system-x86_64”: executable file not found in $PATH
▪ virtualbox: Not installed: unable to find VBoxManage in $PATH

❌ DRV_NOT_HEALTHY が原因で終了します: ドライバーが見つかりましたが、健全なものがありません。上記のインストール済みドライバーの修正方法の提示を参照してください。

「podman使えるけど、使うなら自分をsudoersに入れとけ」というご指示なので、素直にsudoerに入れます。

[nobuakiy@localhost ~]$ sudo visudo
~~~~ 以下の行を最後の近くに入れる ~~~~
nobuakiy ALL=(ALL) NOPASSWD: /usr/bin/podman

nobuakiyというのは、私のユーザー名ですので、そこは直してくださいね。
それで、もう一度minikubeを開始する。

[nobuakiy@localhost ~]$ minikube start
😄 Centos 9 上の minikube v1.34.0
✨ podman ドライバーが自動的に選択されました。他の選択肢: none, ssh
📌 root 権限を持つ Podman ドライバーを使用
👍 Starting “minikube” primary control-plane node in “minikube” cluster
🚜 Pulling base image v0.0.45 …
💾 ロード済み Kubernetes v1.31.0 をダウンロードしています…
> gcr.io/k8s-minikube/kicbase…: 487.90 MiB / 487.90 MiB 100.00% 56.04 M
> preloaded-images-k8s-v18-v1…: 326.69 MiB / 326.69 MiB 100.00% 36.19 M
E1025 17:58:21.409268 57029 cache.go:189] Error downloading kic artifacts: not yet implemented, see issue #8426
🔥 Creating podman container (CPUs=2, Memory=7900MB) …
🐳 Docker 27.2.0 で Kubernetes v1.31.0 を準備しています…
▪ 証明書と鍵を作成しています…
▪ コントロールプレーンを起動しています…
▪ RBAC のルールを設定中です…
🔗 bridge CNI (コンテナーネットワークインターフェース) を設定中です…
🔎 Kubernetes コンポーネントを検証しています…
▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています
🌟 有効なアドオン: storage-provisioner, default-storageclass
🏄 終了しました!kubectl がデフォルトで「minikube」クラスターと「default」ネームスペースを使用するよう設定されました
[nobuakiy@localhost ~]$

やったー。minikube動きました。絵文字がかわいいです。途中 Dockerという文字が出てきてますが、Dockerは入ってないのでどういうことなのかはよくわかりません。メッセージのほとんどが何を言っているのかわかりません。

minikubeをいろいろいじるのは、次回!